﻿--地图按钮，参考了Xinhuan的BankItems
local UFP_MinimapButton = CreateFrame("Button", "UFP_MinimapButton", Minimap);
UFP_MinimapButton:EnableMouse(true);
UFP_MinimapButton:SetMovable(false);
UFP_MinimapButton:SetFrameStrata("MEDIUM");
UFP_MinimapButton:SetWidth(33);
UFP_MinimapButton:SetHeight(33);
UFP_MinimapButton:ClearAllPoints();
UFP_MinimapButton:SetHighlightTexture("Interface\\Minimap\\UI-Minimap-ZoomButton-Highlight");

UFP_MinimapButton:CreateTexture("UFP_MinimapButtonIcon", "BORDER");
UFP_MinimapButtonIcon:SetWidth(20);
UFP_MinimapButtonIcon:SetHeight(20);
UFP_MinimapButtonIcon:SetPoint("CENTER", -2, 1);
UFP_MinimapButtonIcon:SetTexture("Interface\\AddOns\\UnitFramesPlus\\MinimapButton");

UFP_MinimapButton:CreateTexture("UFP_MinimapButtonBorder", "OVERLAY");
UFP_MinimapButtonBorder:SetWidth(52);
UFP_MinimapButtonBorder:SetHeight(52);
UFP_MinimapButtonBorder:SetPoint("TOPLEFT");
UFP_MinimapButtonBorder:SetTexture("Interface\\Minimap\\MiniMap-TrackingBorder");

local function UFP_MinimapButton_UpdatePosition()
    UFP_MinimapButton:ClearAllPoints();
    UFP_MinimapButton:SetPoint(
        "TOPLEFT",
        Minimap,
        "TOPLEFT",
        53.5 - (UnitFramesPlusDB["minimap"]["radius"] * cos(UnitFramesPlusDB["minimap"]["position"])),
        (UnitFramesPlusDB["minimap"]["radius"] * sin(UnitFramesPlusDB["minimap"]["position"])) - 55.5
    );
end

local function UFP_MinimapButton_BeingDragged()
    local xpos, ypos = GetCursorPosition();
    local xmin, ymin = Minimap:GetLeft(), Minimap:GetBottom();

    xpos = xmin-xpos/UIParent:GetScale()+70;
    ypos = ypos/UIParent:GetScale()-ymin-70;

    local v = math.deg(math.atan2(ypos, xpos));
    if v < 0 then
        v = v + 360;
    end
    UnitFramesPlusDB["minimap"]["position"] = v;
    UFP_MinimapButton_UpdatePosition();
end

function UnitFramesPlus_MinimapButton()
    if UnitFramesPlusDB["minimap"]["button"]==1 then
        UFP_MinimapButton:RegisterForDrag("RightButton");
        UFP_MinimapButton:SetScript("OnDragStart", function(self)
            self:SetScript("OnUpdate", UFP_MinimapButton_BeingDragged);
        end)
        UFP_MinimapButton:SetScript("OnDragStop", function(self)
            self:SetScript("OnUpdate", nil);
        end)
        UFP_MinimapButton:SetScript("OnClick", function(self)
            UnitFramesPlus_SlashHandler();
        end)
        UFP_MinimapButton:SetScript("OnEnter", function(self)
            GameTooltip:SetOwner(self, "ANCHOR_LEFT");
            GameTooltip:SetText("UnitFramesPlus v"..GetAddOnMetadata("UnitFramesPlus", "Version"));
            GameTooltip:AddLine(UFPLocal_LeftOpen);
            GameTooltip:AddLine(UFPLocal_RightMove);
            GameTooltip:Show();
        end)
        UFP_MinimapButton:SetScript("OnLeave", function(self)
            GameTooltip:Hide();
        end)
        UFP_MinimapButton:Show();
        UFP_MinimapButton_UpdatePosition();
    else
        UFP_MinimapButton:RegisterForDrag(nil);
        UFP_MinimapButton:SetScript("OnDragStart", nil);
        UFP_MinimapButton:SetScript("OnDragStop", nil);
        UFP_MinimapButton:SetScript("OnClick", nil);
        UFP_MinimapButton:SetScript("OnEnter", nil);
        UFP_MinimapButton:SetScript("OnLeave", nil);
        UFP_MinimapButton:Hide();
    end
end
